package cont;

import ni.*;
import data.*;
import java.io.IOException;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import commProtocol.*;
import java.io.File;
import java.util.ArrayList;

public class ChatController {

    private Contact utilisateur;
    private ListContacts listContact;
    private ChatNI ni;

    public ChatController() throws SocketException, IOException{
        listContact = new ListContacts(new HashtableAdapter());
        ni = new ChatNI();

    }

    public void connect(String pseudo){
        //création d'un nouveau contact, moi-même
        utilisateur = new Contact(pseudo, ni.getAdresse_locale());
        //une réponse est nécessaire pour récupérer les personnes connectées
        Hello message = new Hello(utilisateur, true);
        try {
            //le message est envoyé sur tout le réseau
            ni.send_multi(message);
        } catch (Exception ex) {
            Logger.getLogger(ChatController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void envoie_message(String texte, ArrayList<String> pseudo_dests) {
        int index = 0;
        Texte message = new Texte(utilisateur, texte);
        //envoie du message à tous les destinataires
        while(! pseudo_dests.isEmpty()){
                try {
                    ni.send(message, listContact.getContact(pseudo_dests.get(index)));
                } catch (Exception ex) {
                    Logger.getLogger(ChatController.class.getName()).log(Level.SEVERE, null, ex);
                }
            index++;
        }
    }

    public void reception_message(Message m){

        //Nathalie : à toi de coder avec le gui
    }

    public void reception_fichier(Message m){

        //Nathalie : à toi de coder avec le gui, si tu le sens !!
    }

    public void envoie_fichier(String fname, ArrayList<String> pseudo_dests){
        int index = 0;
        Fichier message = new Fichier(utilisateur, fname,(new File(fname)).length());
        //envoie du message à tous les destinataires
        while(! pseudo_dests.isEmpty()){

                try {
                    ni.send(message, listContact.getContact(pseudo_dests.get(index)));
                } catch (Exception ex) {
                    Logger.getLogger(ChatController.class.getName()).log(Level.SEVERE, null, ex);
            }
            index++;
        }
    }

    public void disconnect(){
        Bye message = new Bye(utilisateur);
        try {
            //le message est envoyé sur tout le réseau
            ni.send_multi(message);
        } catch (Exception ex) {
            Logger.getLogger(ChatController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void connexionContact(Contact contact){
        listContact.addContact(contact);
    }

    public void deconnexionContact(Contact contact){
        listContact.removeContact(contact.getLogin());
    }

}
